//control模块依赖于 model
const {
    add,
    del,
    update,
    check,
    updateTokenId,
    checkAll
} = require("../models/infoModel");
const moment = require("moment");

//增加的控制代码
const addCtr = async (req, res) => {
    //我们考虑在增加数据的时候,添加一个tokenId 字段  用来作为唯一主键
    //至于tokenId的赋值 我们根据查询的结果  如果查询到的是个数组,如果里面没有东西 它的length就是0 
    // 然后我要插入第一条的tokenId就等于length+1  第二条查询到length1 插入第二条我们的id就是length+1=2
    // 如果check里面默认什么都没传的话,就返回所有的东西
    const arr = await check();
    // console.log(arr)
    // console.log(arr.length)
    const tokenId = arr.length + 1;
    req.body.tokenId = tokenId;
    // console.log(req.body);
    const time = moment().format("YYYY-MM-DD,hh:mm:ss a")
    req.body.createTime = time;
    const result = await add(req.body);
    // console.log(result)
    //如果保存失败的话,会result就等于undefined 我们只需要判断是否存在result就行了
    if (result) {
        res.send({
            status: true,
            code: 1,
            msg: "保存成功"
        })
    } else {
        res.send({
            status: false,
            code: 0,
            msg: "保存失败"
        })
    }

}

//find 查询的控制代码
const checkCtr = async (req, res) => {
    // console.log(req.body);
    //  console.log(req.query)
    //分页的代码  首页分别从前端的req.query获得page页码和count每页显示多少个
    console.log(req)
    let {
        page,
        count
    } = req.query;
    //然后判断 如果page没有传的话,默认就是第一页
    page = page ? parseInt(page) : 1;
    //如果每页多少个没有传,就默认每页显示3个
    count = count ? parseInt(count) : 8;
    //然后通过之前写的分页公式  也就是写在model里的skip()里的值
    //假如要当前是第二页 每页显示3个 那么就要跳过3个 才能显示4-6 
    //也就是2-1*3=6  所以就是下面的公式
    const CurrentPage = (page - 1) * count;
    //搜索的url内容
    let wd = req.query.wd
    //根据查询某个单独的数据
    let uid = req.query.uid; 
    //我们根据id查询,如果没有传id的话.就传一个空对象,空对象就表示查询所有,但后端又limit和skip了
    //所以只会显示我们默认的limit的个数
    //定义一个find的搜索条件
    let query;
    //为什么要判断?
    //因为我们查询的时候希望只查到对应的内容,比如前端输入tokenId查询,此时tokenId存在,所以就让搜索条件是按照id查询的
    //如果前端输入的是wd也就是搜索,那么我们就给他们根据关键词搜索获得的结果
    //如果什么都没有输入,那么就返回所有的 但有limit默认值 其实也就返回前三条
    //如果同时输入wd 和tokenId就要同时满足数据库里有才行,没有的话就找不到
    if (uid&&wd) {
        //没有同时满足 就什么也搜不到
        query={
            uid:uid,
            wd:new RegExp(wd)
        }
    } else if (uid) {
        query = {
            uid: uid
        };
    } else if (wd) {
        query = {
            //如果要传变量的话,只能通过构造函数的方法来新建 正则表达式
            companyName: new RegExp(wd)
        }
    } else {
        query = {}
    }



    //将参数传给model层的函数
    const result = await check(count, CurrentPage, query);
    console.log(result)

    //  console.log(result)
    //如果保存失败的话,会result就等于undefined 我们只需要判断是否存在result就行了
    if (result) {
        res.send({
            status: true,
            code: 1,
            data: result
        })
    } else {
        res.send({
            status: false,
            code: 0,
            msg: "查询失败"
        })
    }
}


//删除的代码需要考虑 要用一个唯一主键 来删除对应的一条数据 
const delCtr = async (req, res) => {
    const tokenId = req.query.tokenId

    const result = await del(tokenId);
    const update = await updateTokenId(tokenId);
    //即使没有对应的id 也能够删除 会result会返回一个{ n: 0, ok: 1, deletedCount: 0 }
    //删除成功{ n: 1, ok: 1, deletedCount: 1 }
    //所以不能够判断result是否存在,不管删除是否成功,result都存在,所以要判断的是result.n
    if (result.n && update) {

        //由于删除不存在的id也能够跳进删除成功里面
        res.send({
            status: true,
            code: 1,
            msg: "删除成功"
        })
    } else {
        res.send({
            status: false,
            code: 0,
            msg: "删除失败"
        })
    }
}


//更新的控制代码
const updateCtr = async (req, res) => {
    const tokenId = req.body.tokenId
    console.log(req.body)
    let query = {
        tokenId: tokenId
    }
    console.log(query)
    let updated = req.body;
    const result = await update(query, updated);
    //  console.log(result)
    if (result.n) {
        //由于删除不存在的id也能够跳进删除成功里面
        res.send({
            status: true,
            code: 1,
            msg: "更新成功"
        })
    } else {
        res.send({
            status: false,
            code: 0,
            msg: "更新失败"
        })
    }
}


const checkAllCtr=async(req,res)=>{
    const  result =await checkAll();
    if(result){
        res.send({code:1,data:result});
    }else{
        res.send({code:1,msg:"查询出错"});
    }
}

module.exports = {
    addCtr,
    checkCtr,
    delCtr,
    updateCtr,
    checkAllCtr
}